Fix libxenstat on Solaris
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 27 Feb 2008 13:10:42 +0000 (13:10 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 27 Feb 2008 13:10:42 +0000 (13:10 +0000)
Recent Solaris enhancements have changed the way virtual NIC
statistics are collected - fix libxenstat up for this.

Signed-off-by: John Levon <john.levon@sun.com>
tools/xenstat/libxenstat/src/xenstat_solaris.c

index 719c30d8ac0912bd7641c38f2548e5106b56c8d1..d79c410f44b881946afc3e629f79e1fd2de3964a 100644 (file)
@@ -113,49 +113,23 @@ static void xenstat_uninit_devs(xenstat_handle *handle, int type)
        priv->kc = NULL;
 }
 
-static int parse_nic(const char *nic, char *module, int *instance)
-{
-       const char *c;
-
-       for (c = &nic[strlen(nic) - 1]; c != nic && isdigit(*c); c--)
-               ;
-
-       if (c == nic)
-               return 0;
-
-       c++;
-
-       if (sscanf(c, "%d", instance) != 1)
-               return 0;
-
-       strncpy(module, nic, c - nic);
-       module[c - nic] = '\0';
-       return 1;
-}
-
 static int update_dev_stats(priv_data_t *priv, stdevice_t *dev)
 {
-       char mod[256];
-       const char *name;
-       int inst;
        kstat_t *ksp;
 
+       if (kstat_chain_update(priv->kc) == -1)
+               return 0;
+
        if (dev->type == DEVICE_NIC) {
-               if (!parse_nic(dev->name, mod, &inst))
-                       return 0;
-               name = "mac";
+               ksp = kstat_lookup(priv->kc, "link", 0, (char *)dev->name);
        } else {
-               strcpy(mod, "xdb");
-               inst = dev->instance;
-               name = "req_statistics";
+               ksp = kstat_lookup(priv->kc, "xdb", dev->instance,
+                   (char *)"req_statistics");
        }
 
-       if (kstat_chain_update(priv->kc) == -1)
-               return 0;
-
-       ksp = kstat_lookup(priv->kc, mod, inst, (char *)name);
        if (ksp == NULL)
                return 0;
+
        if (kstat_read(priv->kc, ksp, NULL) == -1)
                return 0;